#include <iostream>
#include <functional>  // 必须包含这个头文件
#include <string>

#include "./math/vec3.h"
#include "./math/quat.h"

#include "./geometry/aabb.h"

int main()
{
    // 测试1
    // 测试Vec3 基于四元数的变换
    Vec3 v(10, 10, 10);
    Quat q;
    q.set(-0.24264555608619373, -0.009010575147093235, -0.23050857974041933, 0.9422885642483385);
    v.rotate(&q);
    std::cout << "Vec3 基于四元数的变换 🚀🚀🚀🚀->  X:" << v.getX() << "  Y:" << v.getY() << "    Z:" << v.getZ() << std::endl;

    // 测试2
    // 测试aabb的位置，缩放，旋转变化

    AABB aabb;
    aabb.setCenter(0, 0, 0);
    aabb.setHalfExtents(0.5, 0.5, 0.5);
    Vec3 v1(0, 0, 1467.703);
    Quat q1;
    q.set(-0.24264555608619373, -0.009010575147093235, -0.23050857974041933, 0.9422885642483385);
    Vec3 s1(1.5, 1.5, 1.5);
    aabb.transform(&v1, &s1, &q);
    std::cout << "AABB 转换 中心点 🚀🚀🚀🚀->  cX:" << aabb.getCenter().getX() << "  cY:" << aabb.getCenter().getY() << "    cZ:" << aabb.getCenter().getZ() << std::endl;
    std::cout << "AABB 转换 半轴长 🚀🚀🚀🚀->  hX:" << aabb.getHalfExtents().getX() << "  hY:" << aabb.getHalfExtents().getY() << "    hZ:" << aabb.getHalfExtents().getZ() << std::endl;

    // std::string a;
    std::function<void()> cc;

    // std::function<void(std::string)> onCollisionCallback; 
    // onCollisionCallback = [](std::string id) {
    //     std::cout << "碰撞发生! 对象ID: " << id << std::endl;
    // };
    // onCollisionCallback("enemy_123");
    // std::cout << "World! " << std::endl;
    return 0;
}